from flask import Flask
from flask_cors import CORS
from conf.config import *
from blueprint.test_bp import bp as testbp
# from blueprint.login_bp import bp as login_bp
# from blueprint.register_bp import bp as register_bp
# from blueprint.register_bp_impl import mail_manager
# from blueprint.write_report_bp import bp as write_report_bp
# from blueprint.read_report_bp import bp as read_report_bp
# from blueprint.task_manage_bp import bp as task_manage_bp
# from auth.login import login_manager
from blueprint.rank import bp as rank_bp
from flask import render_template
"""第一部分，初始化：所有的Flask都必须创建程序实例，
web服务器使用wsgi协议，把客户端所有的请求都转发给这个程序实例
程序实例是Flask的对象，一般情况下用如下方法实例化
Flask类只有一个必须指定的参数，即程序主模块或者包的名字，__name__是系统变量，该变量指的是本py文件的文件名"""
# 前端文件夹叫front_end,默认在此文件夹下找集成文件dist
app = Flask(__name__,static_folder='./frontend/dist/static',
template_folder = "./frontend/dist")
# 注册蓝图中的视图
app.register_blueprint(testbp)
# app.register_blueprint(login_bp)
# app.register_blueprint(register_bp)
# app.register_blueprint(write_report_bp)
# app.register_blueprint(read_report_bp)
# app.register_blueprint(task_manage_bp)
app.register_blueprint(rank_bp)

# 配置跨域请求
CORS(app,resources=CORS_RESOURCES)
# 配置密钥
# Session, Cookies以及一些第三方扩展都会用到SECRET_KEY值
app.secret_key = secret_key
# 配置登陆管理对象
# login_manager.init_app(app)
# 缓存
# 通过此种方式在原本配置中更新配置，而不是直接将新的config覆盖原本的config。
app.config['CACHE_TYPE'] = config['CACHE_TYPE']
app.config['CACHE_DEFAULT_TIMEOUT'] = config['CACHE_DEFAULT_TIMEOUT']
cache.init_app(app,config=redis_config)
# 邮箱配置
app.config['MAIL_SERVER'] = config['MAIL_SERVER']
app.config['MAIL_PORT'] = config['MAIL_PORT']
app.config['MAIL_USE_SSL'] = config['MAIL_USE_SSL']
app.config['MAIL_USERNAME'] = config['MAIL_USERNAME']
app.config['MAIL_PASSWORD'] = config['MAIL_PASSWORD']
# app.config['MAIL_DEFAULT_SENDER'] = config['MAIL_DEFAULT_SENDER']

# mail_manager.init_app(app)






#  第二部分，路由和视图函数：
#  客户端发送url给web服务器，web服务器将url转发给flask程序实例，程序实例
#  需要知道对于每一个url请求启动那一部分代码，所以保存了一个url和python函数的映射关系。
#  处理url和函数之间关系的程序，称为路由
#  在flask中，定义路由最简便的方式，是使用程序实例的app.route装饰器，把装饰的函数注册为路由
@app.route('/')
def hello_world():
    return render_template('index.html',name='index')

#  第三部分：程序实例用run方法启动flask集成的开发web服务器
#  __name__ == '__main__'是python常用的方法，表示只有直接启动本脚本时候，才用app.run方法
#  如果是其他脚本调用本脚本，程序假定父级脚本会启用不同的服务器，因此不用执行app.run()
#  服务器启动后，会启动轮询，等待并处理请求。轮询会一直请求，直到程序停止。
if __name__ == '__main__':
    app.run(host=HOST, port=PORT)
